package com.pe.pgn.clubpgn.webapp.controller.mensaje;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.support.SessionStatus;

import com.pe.pgn.clubpgn.common.CLPConstantes;
import com.pe.pgn.clubpgn.domain.ClpmMensaje;
import com.pe.pgn.clubpgn.service.MensajeService;
import com.pe.pgn.clubpgn.webapp.controller.BaseFormController;
import com.pe.pgn.clubpgn.webapp.util.CalendarUtil;

@Controller
@RequestMapping("/mensaje/**")
public class MensajeController extends BaseFormController{

	@Autowired
	private MensajeService mensajeService;
    	
	@RequestMapping(value = "/mensajelist.html")
    public void listarMensajes(Model model) {

		List<ClpmMensaje> mensajes = mensajeService.obtenerListaMensajes();
		model.addAttribute("mensajes", mensajes);
		model.addAttribute("mensaje_date_format", CLPConstantes.DATE_PATTERN);
    }
	
	@RequestMapping(value = "/mensajeform.html", method = RequestMethod.GET)
	public @ModelAttribute("mensaje") ClpmMensaje verMensaje(
				@RequestParam(value = "id", required = false) Long id, Model model) {

		model.addAttribute("mensaje_date_format", CLPConstantes.DATE_PATTERN);
		if (id != null) {
			ClpmMensaje mensaje = mensajeService.obtenerMensaje(id);
			mensaje.setDesFechaInicioLiq(CalendarUtil.calendarToString(CLPConstantes.DATE_PATTERN, mensaje.getDaInicioVigencia()));
			mensaje.setDesFechaFinLiq(CalendarUtil.calendarToString(CLPConstantes.DATE_PATTERN, mensaje.getDaFinVigencia()));
			return mensaje;
		}
		return new ClpmMensaje();
	}
	
	@RequestMapping(value = "/mensajeform.html", method = RequestMethod.POST)
	public String guardarMensaje(@ModelAttribute("mensaje") ClpmMensaje mensaje,
			BindingResult result, SessionStatus status, HttpServletRequest request) {

		try {
			
			mensaje.setDaInicioVigencia(CalendarUtil.stringToCalendar(CLPConstantes.DATE_PATTERN, mensaje.getDesFechaInicioLiq()));
			mensaje.setDaFinVigencia(CalendarUtil.stringToCalendar(CLPConstantes.DATE_PATTERN, mensaje.getDesFechaFinLiq()));
			
			if(mensaje.getDaInicioVigencia().compareTo(mensaje.getDaFinVigencia()) > 0){
				
				saveError(request, getText("errors.comparando.fechas", 
						new Object []{getText("label.finvigencia", request.getLocale()),
						getText("label.iniciovigencia", request.getLocale())}, 
						request.getLocale()));
				
				return "/mensaje/mensajeform";
			}
			
			if (result.hasErrors()) {
				return "/mensaje/mensajeform";
			}
			mensajeService.guardarMensaje(mensaje);
			saveMessage(request, getText("mensajeform.added", mensaje.getDeMensaje().length() > CLPConstantes.LIMITE_CADENA ?
					mensaje.getDeMensaje().substring(0, CLPConstantes.LIMITE_CADENA)
					.concat(CLPConstantes.PUNTOS_SUSPENSIVOS) : mensaje.getDeMensaje(), 
					request.getLocale()));
			return "redirect:mensajelist.html";
			
		} catch (Exception e) {
			System.out.println("Exception invisible "+e.getMessage());
			saveError(request, getText("errors.general", request.getLocale()));
			return "/mensaje/mensajeform";
		}

	}	
	
	@RequestMapping(value = "/eliminarmensaje.html")
	public String eliminarMensaje(@RequestParam(value = "id", required = false) Long id, 
			HttpServletRequest request) {

		try {

			mensajeService.eliminarMensaje(id);
			saveMessage(request, getText("mensajeform.deleted", request.getLocale()));
			return "redirect:mensajelist.html";
			
		} catch (Exception e) {
			saveError(request, getText("errors.general", request.getLocale()));
			return "/mensaje/mensajeform";
		}

	}		
	
}
